﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Platform.Storage
{
	/// <summary>
	/// Flags que definem o que uma implementação do repositório é capaz de fazer
	/// </summary>
	[Flags]
	public enum SearchStorageCapabilities
	{
		/// <summary>
		/// Indica que pode fazer consultas exatas com o operador '=='
		/// </summary>
		ExactMatch = 0x1,

		/// <summary>
		/// Indica que pode fazer consultas com wildcars. 
		/// </summary>
		/// <remarks>
		/// Exemplo de operadores:
		///		*	=> .contains, .startWith, .endWith
		///		?	=> 
		///		_	=>
		/// </remarks>
		WildcardMatch = 0x2,

		/// <summary>
		/// Indica se consegue interpretar operadores lógicos. 'And' e 'OR'
		/// </summary>
		LogicalOperands = 0x4,

		/// <summary>
		/// Indica se consegue interpretar operadores de comparação. '==', '!=', ...
		/// </summary>
		ComparerOperands = 0x8,

		/// <summary>
		/// Indica que pode ser feito subqueries
		/// </summary>
		Subqueries = 0x10,

		/// <summary>
		/// Indica que pode ser feito joins 
		/// </summary>
		Joins = 0x20,

		/// <summary>
		/// Indica se consegue utilizar funções agregadas
		/// </summary>
		AggregateFunctions = 0x40
	}
}
